import { myRequest } from "@/api/ajax.js"

export default {
	namespaced: true,

	state: {
		text: "我是order模块下state.text的值",
		customer_order:[],    //商家查看的用户全部订单
		length:'',     //商家查看的用户全部订单的数量
		isNewOrder: false,  // 标志是否有新的订单
		
		// 新的订单流水号(订单id)，'-1'代表没有
		newOrderId: -1
	},
	getters: {

	},
	// 全局同步方法；调用方法，this.$store.commit("xxx",parameter)
	mutations: {
		//顾客的全部订单
		receive_customer(state,data){
			state.customer_order=data
			state.length=data.length
			
			// console.log('customer_order',state.customer_order)
		},
		
		// 看过新的订单
		looked_newOrder(state) {
			state.isNewOrder = false
		},
		
		// 设置新的订单流水号
		set_newOrderId(state, data) {
			state.newOrderId = data
			console.log('state.newOrderId = ', state.newOrderId)
		},
		
		// 向骑手派单
		send_order(state) {
			// 派单后不显示'您有新的订单'
			state.isNewOrder = false
			state.newOrderId = -1
		}
	},
	
	// 异步方法；调用方法，this.$store.dispatch("xxx")
	actions: {
		async getCusOrder(context) {
			// console.log('查询订单')
			
			let result = await myRequest({
				url: '/supermarket/dd/adminjk'
			})
			result.reverse()
			// console.log(result)

			//根据jysj（结算时间）把一维数组转换成二维数组
			let arrayTwo = Object.values(result.reduce((res, item) => {
				res[item.jysj] ? res[item.jysj].push(item) : res[item.jysj] = [item];
				return res;
			}, {}));
			// console.log('arrayTwo',arrayTwo)

			//根据用户ID(userID) 把二维数组转换成三维数组  （数组的map方法不会改变原有数组，可以返回一个新数组)
			let arrayThree = arrayTwo.map(item => {
				return item = Object.values(item.reduce((res, item_item) => {
					res[item_item.userID] ? res[item_item.userID].push(item_item) : res[
						item_item.userID] = [item_item];
					return res;
				}, {}));
				// console.log('item',item)

			})

			//3维降2维
			let aTwo = arrayThree.reduce((a, b) => {
				return a.concat(b)
			})

			//最终的形式，数组中的每个元素是对象，对象的goods属性值是数组（map方法会将数组映射成一个新的数组，不会改变原有数组）
			let final_aTwo = aTwo.map(item => {
				return item = item.reduce((obj, element, index, arr) => {
					if (!obj['jysj']) {
						obj['jysj'] = element.jysj
					}
					if (!obj['psdz']) {
						obj['psdz'] = element.psdz
					}
					if (!obj['goods']) {
						obj['goods'] = arr
					}
					obj['sum_money'] ? obj['sum_money'] += element.ddze : obj['sum_money'] = element
						.ddze
					return obj
				}, {})
			})

			// console.log('final_aTwo',final_aTwo)
			context.commit('receive_customer', final_aTwo)
		},

		// 当websocket接收到消息后
		handleWebsocket({state, commit, dispatch}, param) {
			// console.log('param = ', param)
			// strs[1]是订单流水号
			let strs = param.split(' ')
			console.log('strs', strs)
			if (strs[0] == '有新的订单') {
				// 订单流水号（订单id）
				let serialNumber = strs[1]
				commit('set_newOrderId', serialNumber)
				state.isNewOrder = true
				dispatch('getCusOrder')
			}
		}
	}
}
